#ifndef COMMON_H
#define COMMON_H

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <time.h>
#include <stdbool.h>

// 数学常量
#define PI 3.14159265358979323846
#define DEG_TO_RAD (PI / 180.0)
#define RAD_TO_DEG (180.0 / PI)

// 物理常量
#define EARTH_RADIUS 6371000.0  // 地球半径 (米)
#define GRAVITY 9.80665         // 重力加速度 (m/s²)
#define MU 3.986004418e14       // 地球引力常数 (m³/s²)

// 卫星参数
#define SATELLITE_MASS 500.0    // 卫星质量 (kg)
#define MAX_THRUST 0.1          // 离子发动机最大推力 (N)
#define ISP 3000.0              // 比冲 (s)
#define MAX_TORQUE 0.05         // 最大控制力矩 (N·m)

// 控制参数
#define CONTROL_FREQUENCY 10.0    // 控制频率 (Hz)
#define PID_KP 0.5              // PID比例增益
#define PID_KI 0.1              // PID积分增益
#define PID_KD 0.2              // PID微分增益

// 容差
#define POSITION_TOLERANCE 100.0  // 位置容差 (米)
#define ATTITUDE_TOLERANCE 0.01  // 姿态容差 (弧度)
#define VELOCITY_TOLERANCE 0.1   // 速度容差 (m/s)

// 错误码
typedef enum {
    SUCCESS = 0,
    ERROR_INVALID_INPUT,
    ERROR_MATH_DOMAIN,
    ERROR_FILE_IO,
    ERROR_MEMORY,
    ERROR_GNSS_DATA,
    ERROR_CONTROL_FAILED
} ErrorCode;

// 调试宏
#ifdef DEBUG
#define DEBUG_PRINT(fmt, ...) printf("[DEBUG] " fmt "\n", ##__VA_ARGS__)
#else
#define DEBUG_PRINT(fmt, ...)
#endif

// 工具宏
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define CLAMP(x, min, max) (MAX(min, MIN(max, x)))

#endif // COMMON_H
